<?php

/*
 * This file is part of SwiftMailer.
 * (c) 2004-2009 Chris Corbyn
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Buffers input and output to a resource.
 *
 * @package    Swift
 * @subpackage Transport
 * @author     Chris Corbyn
 */
interface Swift_Transport_IoBuffer extends Swift_InputByteStream, Swift_OutputByteStream
{
	/** A socket buffer over TCP */
	const TYPE_SOCKET = 0x0001;

	/** A process buffer with I/O support */
	const TYPE_PROCESS = 0x0010;

	/**
	 * Perform any initialization needed, using the given $params.
	 *
	 * Parameters will vary depending upon the type of IoBuffer used.
	 *
	 * @param array $params
	 */
	public function initialize(array $params);

	/**
	 * Set an individual param on the buffer (e.g. switching to SSL).
	 *
	 * @param string $param
	 * @param mixed $value
	 */
	public function setParam($param, $value);

	/**
	 * Perform any shutdown logic needed.
	 */
	public function terminate();

	/**
	 * Set an array of string replacements which should be made on data written
	 * to the buffer.
	 *
	 * This could replace LF with CRLF for example.
	 *
	 * @param string[] $replacements
	 */
	public function setWriteTranslations(array $replacements);

	/**
	 * Get a line of output (including any CRLF).
	 *
	 * The $sequence number comes from any writes and may or may not be used
	 * depending upon the implementation.
	 *
	 * @param integer $sequence of last write to scan from
	 *
	 * @return string
	 */
	public function readLine($sequence);
}
